package com.zhenmaitang.clinic_sys.mapper;

import com.zhenmaitang.clinic_sys.entity.UserRole;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 用户角色关联Mapper接口 - 操作user_roles关联表
 */
@Mapper
public interface UserRoleMapper {
    
    /**
     * 根据用户ID查询用户角色关联
     * @param userId 用户ID
     * @return 用户角色关联列表
     */
    List<UserRole> findByUserId(@Param("userId") Integer userId);
    
    /**
     * 根据角色ID查询用户角色关联
     * @param roleId 角色ID
     * @return 用户角色关联列表
     */
    List<UserRole> findByRoleId(@Param("roleId") Integer roleId);
    
    /**
     * 创建用户角色关联
     * @param userRole 用户角色关联对象
     * @return 影响的行数
     */
    int insert(UserRole userRole);
    
    /**
     * 批量创建用户角色关联
     * @param userRoles 用户角色关联列表
     * @return 影响的行数
     */
    int batchInsert(@Param("userRoles") List<UserRole> userRoles);
    
    /**
     * 删除用户角色关联
     * @param userId 用户ID
     * @param roleId 角色ID
     * @return 影响的行数
     */
    int deleteByUserIdAndRoleId(@Param("userId") Integer userId, @Param("roleId") Integer roleId);
    
    /**
     * 根据用户ID删除所有关联
     * @param userId 用户ID
     * @return 影响的行数
     */
    int deleteByUserId(@Param("userId") Integer userId);
    
    /**
     * 根据角色ID删除所有关联
     * @param roleId 角色ID
     * @return 影响的行数
     */
    int deleteByRoleId(@Param("roleId") Integer roleId);
    
    /**
     * 检查用户是否拥有指定角色
     * @param userId 用户ID
     * @param roleId 角色ID
     * @return 是否拥有该角色
     */
    boolean existsByUserIdAndRoleId(@Param("userId") Integer userId, @Param("roleId") Integer roleId);
    
    /**
     * 根据用户ID和部门ID查询角色ID列表
     * @param userId 用户ID
     * @param departmentId 部门ID
     * @return 角色ID列表
     */
    List<Integer> findRoleIdsByUserIdAndDepartmentId(@Param("userId") Integer userId, @Param("departmentId") Integer departmentId);
}